﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DigitalRune.Windows.Docking;

namespace SharpLab
{
    public partial class DebugForm : DockableForm
    {  
        private List<DebugTypes.logMessage> _logList;

        public DebugForm()
        {
            InitializeComponent();
        }

        public DebugForm(List<DebugTypes.logMessage> logList)
        {
            InitializeComponent();

            _logList = logList;

            for (int i = 0; i < _logList.Count; i++)
            {
                AddLogMessage(_logList[i].TimeStamp, _logList[i].LogType, _logList[i].Class, _logList[i].Function, _logList[i].Message);
            }
        }

        /// <summary>
        /// Diese Funktion trägt eine Logmeldung in die Liste Logmeldungen ein
        /// </summary>
        /// <param name="MessType">Meldungstyp</param>
        /// <param name="Class">Die Klasse aus der die Meldung kommt</param>
        /// <param name="Function">Die Funktion, welche die Meldung ausgelöst hat</param>
        /// <param name="Message">Der Meldungstext</param>
        /// <returns>True, wenn das Eintragen erfolgreich war und false wenn nicht.</returns>
        public bool AddLogMessage(DateTime TimeStamp, DebugTypes.TMess MessType, string Class, string Function, string Message)
        {
            try
            {
                ListViewItem LvIt = new ListViewItem();

                //Den Meldungstyp ermitteln und 
                switch (MessType)
                {
                    case DebugTypes.TMess.Fehler:
                        LvIt.Text = "Fehler";
                        LvIt.ImageIndex = 0;
                        break;
                    case DebugTypes.TMess.Warnung:
                        LvIt.Text = "Warnung";
                        LvIt.ImageIndex = 1;
                        break;
                    case DebugTypes.TMess.Info:
                        LvIt.Text = "Info";
                        LvIt.ImageIndex = 2;
                        break;
                }

                //Datum
                LvIt.SubItems.Add(TimeStamp.ToString());
                //Klasse
                LvIt.SubItems.Add(Class);
                //Funktion
                LvIt.SubItems.Add(Function);
                //Meldungstext
                LvIt.SubItems.Add(Message);

                //Meldung in die Listview eintragen
                LvLog.Items.Add(LvIt);

                return true;
            }
            catch (Exception ex)
            {
                AddLogMessage(DateTime.Now,DebugTypes.TMess.Fehler, "DebugForm", "AddLogMessage", ex.Message);
                return false;
            }
        }
    }
}
